package org.example.classtopia.Service;

import org.example.classtopia.Model.Entity.AiChatSession;
import org.example.classtopia.Model.Entity.AiChatMessage;
import org.example.classtopia.Model.dto.AiSessionCreateDTO;
import org.example.classtopia.Model.vo.AiMessageHistoryVO;
import org.example.classtopia.Model.vo.AiSessionListVO;
import org.example.classtopia.Model.vo.AiSessionVO;
import org.example.classtopia.Model.vo.AiMessageVO;
import org.example.classtopia.Common.Result.Result;

/**
 * AI聊天会话元数据管理服务
 * 只处理会话元数据，消息存储和查询由内存或其他服务处理
 */
public interface AiChatSessionHistoryService {
    /**
     * 创建新的聊天会话
     * 
     * @param dto    创建会话的数据传输对象
     * @param userId 用户ID
     * @return 创建的会话信息
     */
    Result<AiSessionVO> createSession(AiSessionCreateDTO dto, Long userId);

    /**
     * 创建或更新会话
     * 
     * @param sessionId 会话ID
     * @param userId    用户ID（可选，支持匿名会话）
     * @param title     会话标题
     * @return 创建结果
     */
    Result<AiChatSession> createOrUpdateSession(String sessionId, Long userId, String title);

    /**
     * 获取会话列表（支持用户ID过滤）
     *
     * @param userId 用户ID（可选）
     * @param page   页码
     * @param size   每页大小
     * @return 会话列表
     */
    Result<AiSessionListVO> getSessionList(Long userId, Integer page, Integer size);

    /**
     * 获取会话详细信息
     * 
     * @param sessionId 会话ID
     * @return 会话信息
     */
    Result<AiChatSession> getSessionDetail(String sessionId);

    /**
     * 更新会话标题
     * 
     * @param sessionId 会话ID
     * @param title     新标题
     * @return 更新结果
     */
    Result<Void> updateSessionTitle(String sessionId, String title);

    /**
     * 更新会话的最后活动时间
     * 
     * @param sessionId 会话ID
     * @return 更新结果
     */
    Result<Void> updateSessionLastActivity(String sessionId);

    /**
     * 删除会话（会话元数据和消息）
     * 
     * @param sessionId 会话ID
     * @return 删除结果
     */
    Result<Void> deleteSession(String sessionId);

    /**
     * 获取会话消息历史（支持用户ID过滤）
     *
     * @param sessionId 会话ID
     * @param userId    用户ID（可选）
     * @param page      页码
     * @param size      每页大小
     * @return 消息历史
     */
    Result<AiMessageHistoryVO> getSessionMessages(String sessionId, Long userId, Integer page, Integer size);

    /**
     * 处理聊天请求，返回AI回复
     *
     * @param prompt      用户输入
     * @param sessionId   会话ID
     * @param currentUser 当前用户（可为null，支持匿名）
     * @return AI的回复消息
     */
    Result<AiMessageVO> getChatResponse(String prompt, String sessionId,
            org.example.classtopia.Model.Entity.User currentUser);

    /**
     * 保存消息到会话
     * 
     * @param message 消息对象
     * @return 保存结果
     */
    Result<Void> saveMessage(AiChatMessage message);

    // ...existing code...

    /**
     * 处理聊天请求，返回AI回复（带用户回复内容）这个是给快速回复用的
     *
     * @param prompt      用户输入
     * @param sessionId   会话ID
     * @param currentUser 当前用户（可为null，支持匿名）
     * @param userReply   用户回复内容
     * @return AI的回复消息
     */
    Result<AiMessageVO> AIgetChatResponse(String prompt, String sessionId,
            org.example.classtopia.Model.Entity.User currentUser, String userReply);

}
